import {createRouter, createWebHistory, RouteLocationNormalized, Router, RouteRecordRaw} from "vue-router";
import {$local} from "@/store";
import {constantRoutes, layoutRoute} from "@/router/routes.ts";
import {asyncRoutes} from "@/router/layout.ts";

let routes: RouteRecordRaw[] = constantRoutes;

// let routesList: RouteRecordRaw[];
let childrenList = layoutRoute[0].children;
asyncRoutes.forEach((value, _index, _array) => {
    childrenList?.push(value);
});


routes = [...layoutRoute, ...constantRoutes]
const router: Router = createRouter({
    routes,
    history: createWebHistory(),
    // 刷新时，滚动条位置还原
    scrollBehavior: () => ({left: 0, top: 0}),
});

router.beforeEach(async (to: RouteLocationNormalized, _from: RouteLocationNormalized, next) => {

    const token = $local.get("user");

    // 如果需要登录
    if (to.meta.needLogin) {
        // 获取token
        // const token = $local.get("user");
        // 如果有token 则直接放行
        if (token) {
            // 递归调用{ ...to, replace: true } 由于刷新页面的时候动态路由会刷新掉，然后动态路由会重新加载，而匹配路由会在加载路由之前，所以会导致空白页
            // next({ ...to, replace: true });

            // 获取用户信息，从store里面获取
            let userInfo = $local.get("user");
            // 如果没有用户信息就获取用户信息
            if (!userInfo) {
                // userInfo = await store.dispatch("getUserInfoAction");
            }
            // 如果页面需要权限，并且用户角色不满足则去无权限提示页
            // if (to.meta.roles && !to.meta.roles.includes(userInfo.role)) {
            //     return next("/404");
            // }

            // next({path: `${to.path}`})
            // next({...to, replace: true});
        } else {
            // 否则去登录页
            next("/login");
        }
    } else {
        // 不需要登录则直接放行
        next();

        // next({path: `${to.path}`});

    }
});

// 修改标题的工作可以放在全局后置守卫
router.afterEach((to, _from) => {
    if (to.meta.title) {
        document.title = `${to.meta.title}`;
    }
})

// 首字母转大写
// @ts-ignore
function firstUppercase(str: string) {
    return str[0].toUpperCase() + str.substring(1)
}

export default router;
